package com.yellowcong.controller;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yellowcong.service.UserService;
import com.yellowcong.token.JwtToken;
import com.yellowcong.utils.JwtUtils;

/**
 * 创建日期:2018年5月8日<br/>
 * 代码创建:黄聪<br/>
 * 功能描述:<br/>
 */
@Controller
@RequestMapping("/user")
public class UserController {
	
	@Autowired
	UserService userService;
	
	/**
	 * 用户列表
	 * @param map
	 * @return
	 */
	/*@ResponseBody
	@RequestMapping("/list")
	public String list(ModelMap map){
		Subject subject = SecurityUtils.getSubject();
		String token = subject.getPrincipal().toString();
		
		String user = JwtUtils.getUsername(token);
		return "欢迎用户"+user;
	}*/
	
//	@ResponseBody
	@RequestMapping("/list")
	public String list(ModelMap map){
		Subject subject = SecurityUtils.getSubject();
		String token = subject.getPrincipal().toString();
		
		String user = JwtUtils.getUsername(token);
		map.put("username", user);
		return "/user/list";
	}
	
	
	@ResponseBody
	@RequestMapping("/unauthorized")
	public String unauthorized(){
		return "用户未授权";
	}
	
	@ResponseBody
	@RequestMapping("/page2")
	public String testPage2(){
		return "测试需要授权的页面";
	}
	
	/**
	 * 跳转到登录页面
	 * 创建日期:2017年9月23日<br/>
	 * 创建用户:yellowcong<br/>
	 * 功能描述:
	 * @return
	 */
	@RequestMapping(value="/login",method=RequestMethod.GET)
	public String loginInput(){
		return "user/loginInput";
	}
	
	/**
	 * 退出操作
	 * @return
	 */
	@RequestMapping(value="/logout")
	public String logout(){
		//登出系统
		SecurityUtils.getSubject().logout();
		return "user/loginInput";
	}

	/**
	 * 创建日期:2017年9月23日<br/>
	 * 创建用户:yellowcong<br/>
	 * 功能描述:用户登录操作
	 * @param username
	 * @param password
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value="/login",method=RequestMethod.POST)
	public String login(String username,String password){
		try {
			//获取subject信息
			Subject subject = SecurityUtils.getSubject();
			
			//判断用户是否授权,解决已经登陆授权的用户，重新登陆授权
			if(!this.userService.chkUser(username, password)) {
				throw new RuntimeException("用户登陆失败");
			}
			
			//检查用户信息
			String tokenStr = JwtUtils.sign(username);
			
			//用户登录
			JwtToken token = new JwtToken(tokenStr);
			
			//登录用户
			subject.login(token);
			return token.getToken();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "登陆失败";
	}
	
	
	@ResponseBody
	@RequestMapping("/error")
	public String error(){
		return "认证失败";
	}
}
